package com.sinog.front.feign.biz;

import com.sinog.core.domain.PrisonerMain;
import com.sinog.core.model.PrisonerMainAndHcVo;
import com.sinog.core.model.UserDTO;
import com.sinog.core.utilbean.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;

/**
 * @desc 核查feign
 * @author huoakang
 * @date 2020-02-10
 */
@FeignClient("sinog2c-biz")
public interface VerificationService {

    /**
     * 预安置管理 - 预安置人员核查 - 列表
     * @param pageIndex 起始页 默认:0
     * @param pageSize 止页数 默认:50
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @param departId 当前登录用户机构编码
     * @param level 当前登录用户level
     * @param state 0:信息未录入完整 1:待核查 2:核查中 3:核查成功人员 4:核查失败人员 5:待办工作 6:已办工作
     * @param nameKey 姓名
     * @param sexKey 性别 1:男、2:女
     * @param hjKey 户籍类型 01:户籍完整人员、02:查不清户籍人员
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param account account
     * @param hcType 核查成功类别 1:一次核查成功、2:二次核查成功、3:三次核查成功、4:查不清户籍核查成功
     * @return String
     */
    @RequestMapping("/azbj/verification/info/list")
    String getVerificationList(
            @RequestParam("pageIndex") Integer pageIndex,
            @RequestParam("pageSize") Integer pageSize,
            @RequestParam("sortField") String sortField,
            @RequestParam("sortOrder") String sortOrder,
            @RequestParam("departId") String departId,
            @RequestParam("level") String level,
            @RequestParam("state") String state,
            @RequestParam("sexKey") String sexKey,
            @RequestParam("nameKey") String nameKey,
            @RequestParam("hjKey") String hjKey,
            @RequestParam("inputSource") String inputSource,
            @RequestParam("account") String account,
            @RequestParam("hcType") String hcType);

    /**
     * 修改核查状态
     * @param prinum 人员罪犯编码
     * @param state 0:未发起核查 1:核查中
     * @param data 修改的数据
     * @param authentication 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification/hcstate")
    Result updateHcState(
            @RequestParam("prinum") String prinum,
            @RequestParam("state") String state,
            @RequestParam("data") String data,
            @RequestBody UserDTO authentication);

    /**
     * 批量修改核查状态
     * @param prinums 罪犯编码
     * @param state 0:未发起核查 1:核查中
     * @param data 实际业务数据
     * @param userDTO 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification/plhcstate")
    Result updateHcStatePl(
            @RequestParam("prinums") String prinums,
            @RequestParam("state") String state,
            @RequestParam("data") String data,
            @RequestBody UserDTO userDTO);

    /**
     * 预安置管理 - 预安置人员发起核查 - 核查失败 - 再次发起核查
     * @param data data
     * @param userDTO 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification/agreestate")
    Result updateAgreeState(@RequestParam("data") String data,
                            @RequestBody UserDTO userDTO);

    /**
     * 根据id查询核查表信息
     * @param id 核查表主键
     * @return Map<String,Object>
     */
    @RequestMapping("/azbj/verification-zxhc/id")
    Map<String,Object> getPrisonerHcById(@RequestParam("id") String id);

    /**
     * 根据罪犯编号查询核查信息
     * @param priNum 罪犯编码
     * @return List<Map < String,Object>>
     */
    @RequestMapping("/azbj/verification-zxhc/prinum")
    List<Map<String,Object>> getPrisonerHcListByPriNum(@RequestParam("priNum") String priNum);

    /**
     * 转入原侦查机关
     * @param data 人员信息数据
     * @param userDTO 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification-zryzcjg")
    Result saveZryzcjg(@RequestParam("data") String data,
                       @RequestBody UserDTO userDTO);

    /**
     * 推送数据展示，封装成PrisonerMainAndHcVo
     * @param id id
     * @return PrisonerMainAndHcVo
     */
    @GetMapping("/azbj/yazgl/hc/getPrisonerMainAndHcVoById/{id}")
    PrisonerMainAndHcVo getPrisonerMainAndHcVoById(@PathVariable("id") String id);

    /**
     * 预安置管理 - 预安置人员核查 - 待办工作 - 办理
     * @param data 业务数据
     * @param user 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification-tuisong/savePrisonerTs")
    Result savePrisonerMainAndHcVo(@RequestParam("data") String data,@RequestBody UserDTO user);

    /**
     * 预安置管理 - 预安置人员核查 - 核查中 - 签收
     * @param priNum 服刑人员编号
     * @param type 1:核查签收,2:出监评估签收,3:完成衔接签收
     * @param userDTO 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification/signFor")
    Result signFor(@RequestParam("priNum") String priNum,
                   @RequestParam("type") String type,
                   @RequestBody UserDTO userDTO);

    /**
     * 根据户籍街道编码查询是否有对应的司法所存在
     * @param prisonerMain 基本信息
     * @return Result
     */
    @RequestMapping("/azbj/verification-zxhc/sfsUser")
    Result selectUserByNativevill(@RequestBody PrisonerMain prisonerMain);

    /**
     * 根据罪犯编号获取罪犯全部信息
     * @param priNum 罪犯编号
     * @return PrisonerMain
     */
    @RequestMapping("/azbj/verification/main")
    PrisonerMain getPrisonerMainByPriNum(@RequestParam("priNum")String priNum);

    /**
     * 根据服刑人员编号查找核查信息
     * @param priNum 服刑人员编号
     * @return Result
     */
    @RequestMapping("/azbj/verification/getPrisonerHcByPriNum")
    Result getPrisonerHcByPriNum(@RequestParam("priNum")String priNum);

    /**
     * sfbadmin--系统管理--死数据列表
     * @param pageIndex 起始页 默认:0
     * @param pageSize 止页数 默认:50
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @param nameKey 姓名
     * @param sexKey 性别 1:男、2:女
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param zdbjKey 重点帮教对象 1:是、2:否
     * @param shenKey 身份证
     * @param zmKey 罪名
     * @param fxKey 服刑单位
     * @param nativepro 省
     * @param nativecity 市
     * @param nativecou 区
     * @param nativevill 街道
     * @param rjStartDate 原判刑期起日
     * @param rjEndDate 释放日期
     * @return String
     */
    @RequestMapping("/azbj/xtgl/ssj/list")
    String getSsjList(
            @RequestParam("pageIndex") Integer pageIndex,
            @RequestParam("pageSize") Integer pageSize,
            @RequestParam("sortField") String sortField,
            @RequestParam("sortOrder") String sortOrder,
            @RequestParam("sexKey") String sexKey,
            @RequestParam("nameKey") String nameKey,
            @RequestParam("inputSource") String inputSource,
            @RequestParam("zdbjKey") String zdbjKey,
            @RequestParam("shenKey") String shenKey,
            @RequestParam("zmKey") String zmKey,
            @RequestParam("fxKey") String fxKey,
            @RequestParam("nativepro") String nativepro,
            @RequestParam("nativecity") String nativecity,
            @RequestParam("nativecou") String nativecou,
            @RequestParam( "nativevill") String nativevill,
            @RequestParam("rjStartDate") String rjStartDate,
            @RequestParam("rjEndDate") String rjEndDate);
}